package com.qianfeng.zhangwei.day28.widget;

import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;

import com.qianfeng.zhangwei.day28.R;

/**
 * @说 明：
 * @项目名称：Sz1504
 * @包 名： com.qianfeng.zhangwei.day28.widget
 * @类 名： TestView
 * @创 建人： zhangwei
 * @创建时间：2015-07-22 14:31
 * @版 本：v1.0
 * @修 改人：
 * @修改时间：
 * @修改备注： 画笔
 * 画布
 *
 * 自定义属性
 * 如何自定义属性
 * 1> 在res/values/仙剑一个attrs.xm文件
 * 2>在attrs文件里声明子标签declare-styleable  + 属性类型的名称
 * 3>声明子标签 attr + 属性名称 + 属性支持的类型   (注意命名不能跟系统的冲突)
 * 4>使用自定属性
 *
 * 如何获得这些自定属性
 *
 */
public class TestView extends View {
    private Paint paint = new Paint();
    private int textColor;
    private float textSize;


    /**
     * 通过代码new出来
     *
     * @param context
     */
    public TestView(Context context) {
        super(context);
    }


//    2.2的时候有的

    /**
     * 在布局文件中声明的时候就必须重写此方法
     *
     * @param context
     * @param attrs
     */
    public TestView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    /**
     * 在布局文件中声明的时候就必须重写此方法
     *
     * @param context
     * @param attrs
     * @param defStyleAttr
     */
    public TestView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public TestView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

    }

    /**
     * 获得自定属性
     *
     * TypedArray 获得的实例之后  必须调用array.recycle();
     */
    private void init(Context context, AttributeSet attrs) {
        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TextViewStyle);
        textColor = array.getColor(R.styleable.TextViewStyle_mTextColor, Color.BLACK);
        textSize = array.getDimension(R.styleable.TextViewStyle_mTextSize, 16);
        //通知系统可以复用
        array.recycle();
    }
    /**
     * 要实现实现一些特殊要求  就必须重写此方法  必须
     *
     * @param canvas
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //设置画笔的颜色
        paint.setColor(textColor);
        paint.setTextSize(textSize);

        canvas.drawLine(50, 50, 500, 50, paint);


        paint.setColor(textColor);
        paint.setTextSize(textSize);
        canvas.drawText("自定View测试", 500, 500, paint);


        //实心还空心只能使用在画环形图形才有效果
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(50);
        canvas.drawCircle(500, 500, 100, paint);


//            在画布上面话圆弧
//        canvas.drawArc();
//        canvas.drawLine();
//        canvas.drawBitmap();
        //画园
//        canvas.drawCircle();
        //写字
//         canvas.drawText();
        //画四边形
//            canvas.drawRect();

    }

    /**
     * 测量高度 (测量宽高的方法)
     *
     * @param widthMeasureSpec
     * @param heightMeasureSpec
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    public int getTextColor() {
        return textColor;
    }

    public void setTextColor(int textColor) {
        this.textColor = textColor;
        paint.setColor(textColor);
    }

    public float getTextSize() {
        return textSize;
    }

    public void setTextSize(int textSize) {
        this.textSize = textSize;
        paint.setTextSize(textColor);
    }
}
